473922633ce8ed39c143c632c6ba0dbb50886467,xwiki-platform-core/xwiki-platform-rest/xwiki-platform-rest-server/src/main/java/org/xwiki/rest/internal/resources/BaseSearchResult.java,BaseSearchResult,searchDatabaseQuery,#String#String#String#boolean#boolean#number#number#Boolean#String#,627
Before Change
}
String pageUri = null;
try {
if (StringUtils.isBlank(language)) {
pageUri =
UriBuilder
.fromUri(this.uriInfo.getBaseUri())
.path(PageResource.class)
.buildFromEncoded(URLEncoder.encode(wikiName, "UTF-8"),
URLEncoder.encode(spaceName, "UTF-8"),
URLEncoder.encode(pageName, "UTF-8"))
.toString();
} else {
searchResult.setLanguage(language);
pageUri =
UriBuilder
.fromUri(this.uriInfo.getBaseUri())
.path(PageTranslationResource.class)
.buildFromEncoded(URLEncoder.encode(wikiName, "UTF-8"),
URLEncoder.encode(spaceName, "UTF-8"),
URLEncoder.encode(pageName, "UTF-8"),
language).toString();
}
} catch (UnsupportedEncodingException ex) {
After Change
* @param className Add object of type className
* @return list of results
*/
protected List<SearchResult> searchDatabaseQuery(String query, String queryLanguage, String wikiName,
boolean hasProgrammingRights, boolean distinct, int number, int start, Boolean withPrettyNames,
String className)
throws QueryException, IllegalArgumentException, UriBuilderException, XWikiException
{
XWiki xwikiApi = Utils.getXWikiApi(componentManager);
XWikiContext xwikiContext = Utils.getXWikiContext(componentManager);
String database = Utils.getXWikiContext(componentManager).getDatabase();
/* This try is just needed for executing the finally clause. */
try {
List<SearchResult> result = new ArrayList<SearchResult>();
if (query == null || query.trim().startsWith("select")) {
return result;
}
Formatter f = new Formatter();
if (distinct) {
f.format(
"select distinct doc.fullName, doc.space, doc.name, doc.language from XWikiDocument as doc %s",
query);
} else {
f.format("select doc.fullName, doc.space, doc.name, doc.language from XWikiDocument as doc %s", query);
}
String squery = f.toString();
if (!hasProgrammingRights) {
squery
.replace("where ",
"where doc.space<>'XWiki' and doc.space<>'Admin' and doc.space<>'Panels' and doc.name<>'WebPreferences' and ");
}
List<Object> queryResult = null;
queryResult = queryManager.createQuery(squery, queryLanguage).setLimit(number).setOffset(start).execute();
/* Build the result. */
for (Object object : queryResult) {
Object[] fields = (Object[]) object;
String spaceName = (String) fields[1];
String pageName = (String) fields[2];
String language = (String) fields[3];
String pageId = Utils.getPageId(wikiName, spaceName, pageName);
String pageFullName = Utils.getPageFullName(wikiName, spaceName, pageName);
/* Check if the user has the right to see the found document */
if (xwikiApi.hasAccessLevel("view", pageId)) {
Document doc = xwikiApi.getDocument(pageFullName);
String title = doc.getDisplayTitle();
SearchResult searchResult = objectFactory.createSearchResult();
searchResult.setType("page");
searchResult.setId(pageId);
searchResult.setPageFullName(pageFullName);
searchResult.setTitle(title);
searchResult.setWiki(wikiName);
searchResult.setSpace(spaceName);
searchResult.setPageName(pageName);
searchResult.setVersion(doc.getVersion());
searchResult.setAuthor(doc.getAuthor());
Calendar calendar = Calendar.getInstance();
calendar.setTime(doc.getDate());
searchResult.setModified(calendar);
if (withPrettyNames) {
searchResult.setAuthorName(Utils.getAuthorName(doc.getAuthor(), componentManager));
}
/*
* Avoid to return object information if the user is not authenticated. This will prevent crawlers
* to retrieve information such as email addresses and passwords from user's profiles.
*/
if (className != null && !className.equals("") && xwikiContext.getUserReference() != null) {
BaseObject baseObject = Utils.getBaseObject(doc, className, 0, componentManager);
if (baseObject != null) {
searchResult.setObject(DomainObjectFactory.createObject(objectFactory,
uriInfo.getBaseUri(), xwikiContext, doc, baseObject, false, xwikiApi, false));
}
}
String pageUri = null;
if (StringUtils.isBlank(language)) {
pageUri =
Utils.createURI(this.uriInfo.getBaseUri(), PageResource.class, wikiName, spaceName,
pageName).toString();
} else {
searchResult.setLanguage(language);
pageUri =
Utils.createURI(this.uriInfo.getBaseUri(), PageTranslationResource.class, wikiName,
spaceName, pageName, language).toString();
}